package com.zhz.common.tool.sms;

import com.aliyun.dysmsapi20170525.models.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 短信发送接口
 *
 * @author Alfred
 */
public interface SmsSender {
    /**
     * 短信模板
     */
    Map<String, String> TEMPLATE = new HashMap<>();

    /**
     * 发送1对1短信(也可以多个手机号，但是会被当成群发短信)
     *
     * @param phoneNumber    手机号
     * @param template       模板(代码或内容)
     * @param templateParams 参数
     * @param signName       签名
     * @return
     */
    boolean sendSingle(String phoneNumber, String template, Map<String, String> templateParams, String signName);

    /**
     * 批量分组发送短信，比如多个1对1的短信发送
     *
     * @param phoneNumberJson 多个手机号，json显示
     *                        国内短信：+/+86/0086/86或无任何前缀的11位手机号码，例如1590000****。
     *                        国际/港澳台消息：国际区号+号码，例如852000012****。
     * @param templateCode    模板(代码或内容),必须是已添加、并通过审核的短信签名；且短信签名的个数必须与手机号码的个数相同、内容一一对应。
     * @param templateParams  参数
     *                        如果JSON中需要带换行符，请参照标准的JSON协议处理；且模板变量值的个数必须与手机号码、签名的个数相同、
     *                        内容一一对应，表示向指定手机号码中发对应签名的短信，且短信模板中的变量参数替换为对应的值
     * @param signNameJson    短信签名名称。
     *                        必须是已添加、并通过审核的短信签名；且短信签名的个数必须与手机号码的个数相同、内容一一对应。
     * @return
     */
    boolean sendBatch(String phoneNumberJson, String templateCode, String templateParams, String signNameJson);


    /**
     * 查询短信发送统计信息
     *
     * @param querySendStatisticsRequest 查询条件
     * @return 查询结果
     */
    QuerySendStatisticsResponse querySendStatistics(QuerySendStatisticsRequest querySendStatisticsRequest);

    /**
     * 查询短信发送详情
     *
     * @param querySendDetailsRequest 查询条件
     * @return 查询结果
     */
    QuerySendDetailsResponse querySendDetails(QuerySendDetailsRequest querySendDetailsRequest);

    /**
     * 申请短信模板
     *
     * @param addSmsTemplateRequest 模板信息
     * @return 模板信息
     */
    AddSmsTemplateResponse addSmsTemplate(AddSmsTemplateRequest addSmsTemplateRequest);

    /**
     * 查询短信模板列表
     *
     * @param querySmsTemplateListRequest 模板信息
     * @return 模板信息
     */
    QuerySmsTemplateListResponse querySmsTemplateList(QuerySmsTemplateListRequest querySmsTemplateListRequest);
}
